package cn.zyq.ykb.service.config;

import cn.zyq.ykb.beans.config.ConfigProp;
import cn.zyq.ykb.beans.config.ConfigPropOrder;
import cn.zyq.ykb.beans.pay.PayOrder;
import cn.zyq.ykb.beans.user.User;
import cn.zyq.ykb.system.common.PageParam;
import com.github.pagehelper.PageInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 置顶道具配置Service接口
 *
 * @author SystemAuth
 * @date 2023-05-24
 */
public interface ConfigPropService {
    /**
     * 查询置顶道具配置
     *
     * @param configPropID 置顶道具配置主键
     * @return 置顶道具配置
     */
    ConfigProp selectConfigPropByConfigPropID(Integer configPropID);

    /**
     * 查询置顶道具配置
     *
     * @param serviceID 置顶道具配置业务ID
     * @return 置顶道具配置
     */
    ConfigProp selectConfigPropByServiceID(String serviceID);

    /**
     * 查询置顶道具配置列表
     *
     * @param pageParam
     * @return 置顶道具配置集合
     */
    PageInfo<ConfigProp> selectConfigPropList(PageParam pageParam);

    /**
     * 查询置顶道具配置列表
     *
     * @param param
     * @return 置顶道具配置集合
     */
    List<ConfigProp> selectConfigPropList(ConfigProp param);

    /**
     * 新增置顶道具配置
     *
     * @param param 置顶道具配置
     * @return 结果
     */
    int insertConfigProp(ConfigProp param);

    /**
     * 修改置顶道具配置
     *
     * @param param 置顶道具配置
     * @return 结果
     */
    int updateConfigProp(ConfigProp param);

    /**
     * 批量删除置顶道具配置
     *
     * @param configPropIDs 需要删除的置顶道具配置主键集合
     * @return 结果
     */
    int deleteConfigPropByConfigPropIDs(Integer[] configPropIDs);

    /**
     * 删除置顶道具配置信息
     *
     * @param configPropID 置顶道具配置主键
     * @return 结果
     */
    int deleteConfigPropByConfigPropID(Integer configPropID);

    /**
     * 刷新置顶道具下单
     * @param pageParam
     * @param request
     * @param loginUser
     * @return
     */
    ConfigPropOrder propOrder(ConfigProp pageParam, HttpServletRequest request, User loginUser);

    /**
     * 支付回调
     *
     * @param payOrder
     */
    void payNotifyOrder(PayOrder payOrder);

    /**
     * 道具刷新
     * @param taskID
     * @param loginUser
     * @return
     */
    int sxProp(Integer taskID, User loginUser);

    /**
     * 道具置顶
     * @param taskID
     * @param loginUser
     * @return
     */
    int zdProp(Integer taskID, User loginUser);

    /**
     * 购买道具订单超时
     * @param serviceID
     */
    void checkExpire(String serviceID);

    void reloadStateQueue();

    ConfigPropOrder pay(ConfigProp pageParam, HttpServletRequest request);

}
